﻿/**
* @file common_define.h
* @brief 提供基础数据类型和宏的定义
* @author chenxiaole
* @version 1.0.0
* @date 2016-03-29
*/
#ifndef _COMMON_DEFINE_H_
#define _COMMON_DEFINE_H_

#include <stdint.h>

#ifdef _MSC_VER
#include <unordered_map>
#define HashMap std::unordered_map
#include <cmath>
#else
#ifdef __GNUC__
#include <ext/hash_map>
#else
#include <hash_map>
#endif
#define HashMap __gnu_cxx::hash_map
#endif


#ifdef _MSC_VER
#define TCP_PIPE_SIZE       (1024 * 1024 * 10 )
#else
#define TCP_PIPE_SIZE       (1024 * 1024 * 100 )
#endif

#define INVALID_ID		( 0 )

/**
* @brief 获取文件名字
*/
#define __TY_FILE__	( ( strrchr( __FILE__, '/' ) == NULL ) ? __FILE__ :  strrchr( __FILE__, '/' ) + 1 )

/**
* @brief 获取数组长度
*/
#define ARRAY_CNT(a)       ( sizeof( a ) / sizeof( a[0] ) )

/**
* @brief 获取一周时间
*/
#define WEEK_DAY_NUM     7

/*
* @brief 一个小时的秒数
*/
#define SECONDS_OF_HOUR   ( 60 * 60 )

/*
* @brief 一天的秒数
*/
#define SECONDS_OF_DAY   ( SECONDS_OF_HOUR * 24 )

/*
* @brief 一周的秒数
*/
#define SECONDS_OF_WEEK	 ( SECONDS_OF_DAY * WEEK_DAY_NUM )

/*
* @brief 禁止拷贝构造
*/
#define DISALLOW_COPY_AND_ASSIGN( TypeName ) \
	TypeName( const TypeName& ); \
	void operator=( const TypeName& )

/*
* @brief 获得 [ 0, x ) 间随机数　
*/
#define RAND( x )						( ( x == 0 ) ?  0 : ( rand( ) % ( x )  ) )	//( ( int )( ( x ) * ( rand( ) / ( RAND_MAX + 1.0f ) ) ) ) // [ 0, x )
/*
* @brief 获得 [ x, y ) 间随机数　
*/
#define RAND_BETWEEN( x, y )	( ( x ) + RAND( abs( y - x ) ) )

#define RAND_F( ) ( ( float ) rand( ) / ( ( float ) RAND_MAX + 1.0f ) )

#ifndef NULL
#define NULL 0
#endif

#define TY_MSG_HEAD_TYPE	uint32_t
#define TY_MSG_HEAD_LEN		(sizeof(uint32_t))

#ifdef _DEBUG_
#define MAX_PLAYER 200
#else
#define MAX_PLAYER 1000
#endif


#endif

